package com.ruoyi.management.dao.mapper;

import com.ruoyi.management.pojo.dto.AmmeterDirectivesDto;
import com.ruoyi.management.pojo.dto.AmmeterMouthDto;
import com.ruoyi.management.pojo.entity.OperationInstructions;
import com.ruoyi.management.pojo.entity.Qldbykhmx;
import com.ruoyi.management.pojo.param.AmmeterParam;
import com.ruoyi.management.pojo.param.StartAssociationParam;
import com.ruoyi.management.pojo.param.TidParam;
import com.ruoyi.management.pojo.param.ZtParam;
import com.ruoyi.management.pojo.po.*;
import com.ruoyi.management.pojo.vo.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.security.core.parameters.P;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

@Mapper
public interface AmmeterMapper  {
    /**
     * 根据载体编号查询载体列表
     * @param ztParam
     * @return
     */
    List<ZTVO> selectZtByNra(ZtParam ztParam);
    //增加智联器
    int insertzl(ZlPO zlPO);
    //插入指令
    void insert(OperationInstructions operationInstructions);
    //获取指令
    String selectAmmeterDirectives(AmmeterDirectivesDto ammeterDirectivesDto);
    //插入实时数据
    void insertData(AmmeterResultPo po);
    //开合闸
    Integer selectOperation(String ammeterId);
    //开合闸
    void updateOperation(AmmeterSwitchOperationPo ammeterSwitchOperationPo);
    //查询所有载体供添加列表选择
    List<ZTVO> selectzt(@Param("lxbh") Integer lxbh,@Param("tgszt") String[] values,@Param("nr") String nr,@Param("qygs") String qygs);
    //获取数据库自增id
    int dbid();
    //新增电表
    int add(AmmeterAddPO ammeterAddPO);
    //新建电表操作将电表编号拼接修改
    int updateAmmeterDbbh(AmmeterAddPO ammeterAddPO);
    //通过载体和楼层找对应的房间号
    List<RoomVO> selectHouse(AmmeterParam ammeterParam);
    //通过载体找企业
    List<EnterpriseVO> enterprise(AmmeterParam ammeterParam);
    //通过启动时间找当月电表每天数据
    List<AmmeterResultVO> startDayPower(@Param("dbbh") String dbbh, @Param("qysj") Date qysj);
    //更新电表总表
    int updateAmmeter(AmmeterAddPO ammeterAddPO);
    //通过载体项目获取缩写
    String selectztsx(@Param("zt") String zt);
    //关联新增
    void add1(AmmeterAddPO ammeterAddPO);
    //根据电表编号查询电表总表
    AmmeterAddPO selectdbbh(@Param("dbbh") String currentDbbh);
    //通过电表编号查电表总表数据
    AmmeterAddPO selectdbBydbbh(String dbbh);
    //在租用记录里插入数据
    int insertzymx(QldbzymxPO qldbzymxPO);
    //修改房源表的字段
    int updateSqtyy(@Param("fjh") String trimmedFjh,@Param("i") int i);
    //退用取关更新租用表
    int updatezymx(QldbzymxPO qldbzymxPO);
    //通过电表标号将对应的用户表清空
    int updateyh(String dbbh);
    //显示空闲列表筛选
    List<AmmeterResultVO> selectFreeFileter(AmmeterParam ammeterParam);
    //显示使用列表筛选
    List<AmmeterResultVO> selectUseFileter(AmmeterParam ammeterParam);
    //显示客户关联的电表信息
    List<AmmeterResultVO> updateRoom(AmmeterParam ammeterParam);
    //显示电表关联的房源信息
    List<AmmeterResultVO> stqyyData(AmmeterParam ammeterParam);
    //查询所有智联器供添加列表选择
    List<ZlVO> selectAllZt(ZtParam ztParam);
    //修改电表总表的房间信息
    int updateRoomAa(AmmeterAddPO ammeterAddPO);
    //修改租用记录表的房间
    int updatezymx1(QldbzymxPO qldbzymxPO);
    //通过电表id查询电表下关联房间号信息
    String selectFjh(@Param("dbbh") String dbbh);
    //根据电表id查对应房间号
    String selectFjh1(Integer dbid);
    //查询当月第一天的电量
    List<AmmeterMouthDto> selectAmmeterCurrentMonth(@Param("currentDate") Date currentMonthFirstDay);
    //查询上月第一天的电量
    List<AmmeterMouthDto> selectAmmeterLastMonth(@Param("lastMonthDate") Date lastMonthFirstDay);
    //添加载体
    int addZt(ZtPo ztPo);
    //修改载体
    int updateZt(ZtPo ztPo);
    //查询载体排序标号
    int selectPxbh();
    //查询每个电表的主题和操作地址
    List<TidParam> selectTid();
    //查询订阅
    List<TidParam> selectStopic();
    //查询租户详情
    QldbqyinfoVO selectqymx(@Param("khbh") String khbh);
    //查询电表id
    Integer selectDbid(@Param("dbbh") String dbbh);
//    //查询企业info
//    Qlqyinfo selectqymx1(String dbbh);
    //新增qldbqyinfo
    int add3(Qlqyinfo qlqyinfo);
    //更新载体
    int updateqymx(@Param("khbh") String khbh, @Param("zt") String zt2);
    //查询所有电表
    List<AmmeterResultVO> selectAllAmmeter(@Param("dbbh") String dbbh, @Param("zlid") String zlid, @Param("zt") String zt);
    //查询所有电表
    List<AmmeterResultVO> selectAllAmmeter1(@Param("zt") String zt);

    List<AmmeterResultVO> selectAllAmmeter2(@Param("zlid") String zlid, @Param("zt") String zt);

    List<AmmeterResultVO> selectAllAmmeter3(@Param("dbbh") String dbbh, @Param("zt") String zt);
    //查看智联器详情
    ZlVO selectZlx(String zlid);
    //查看智联器关联电表
    List<AmmeterResultVO> selectzldb(String zlid);
    //查看电表详情
    AmmeterXQVO selectAmmeterx(String dbbh);
    //mqtt查询电表编号
    String selectDbbh(@Param("tid") int deviceAddress,@Param("topic") String topic);

    Boolean insertDay(AmmeterResultPo po);
    //查询计费中电表
    List<DbysyVO> selectMeterList(
            @Param("date") Date lastMonthFirstDay,
            @Param("tgszt") String[] values,
            @Param("yxa") Integer yxa,
            @Param("zt") String zt);

    Boolean insertmonth(AmmeterResultPo po);

    List<ZTVO> selectzt1(Integer lxbh);

    List<ZTVO> selectAllZtzt(ZtParam ztParam);
    //查看但电表操作码
    TidParam selectTidSwitch(String dbbh);
    //查看电表状态
    Integer selectAmmeterStatus(String dbbh);

    Boolean insertkh(Qldbykhmx record);
    //通过载体和楼层配选电表
    List<AmmeterResultVO> selectAllDbbh(@Param("zt") String zt,@Param("lc") String lc,@Param("dbyt") String dbyt);
    //查询电表当月用电量
    BigDecimal selectAllPower(@Param("date") Date date,@Param("dbbh") String dbbh);
    //查询租用电表当月用电量
    BigDecimal selectTenantPower(@Param("date") Date date,@Param("dbbh") String dbbh);
    //插入年度数据
    Boolean insertYear(AmmeterResultPo po);

    @Select("SELECT total_power FROM dbday WHERE dbbh = #{dbbh} ORDER BY timestamp DESC LIMIT 1")
    BigDecimal getLatestTotalPowerByDbbh(String dbbh);
    //项目电费数据统计
    DbkhhkbVO selectProjectPower(@Param("date") Date date,@Param("zt") String zt);
    //显示租户整体电费缴纳和开票情况
    List<DbkhhsjbVO> selectTenantPower1(@Param("qymc") String qymc,@Param("zt") String zt);

    Boolean startPower(@Param("dbbh") String dbbh,@Param("dbz") BigDecimal dbz,@Param("timestamp") Date timestamp);

    Boolean updateYt(@Param("dbbh") String dbbh,@Param("dbyt") String dbyt);
    //通过订阅主题找智联器所在位置
    String selectAmmeterZztt(String topic);

    // 根据订阅主题获取电表信息
    AmmeterResultVO selectAmmeterByTopic(String topic);
}
